// 文件名：unordered_map_session_cache.cpp
// 目的：用 unordered_map 实现简单的会话缓存：按会话ID存储用户与最后访问时间，支持触达与删除。
// 要点：
//   - SessionInfo：包含用户名与最后访问时间戳；
//   - sessions.reserve(1024)：根据并发预估预留容量，减少扩容抖动；
//   - touch(id)：若命中则更新 lastAccess，否则报告缺失；
//   - erase(key)：按会话ID删除；size() 查询活跃会话数。
// 复杂度：
//   - 查找/插入/删除均摊 O(1)；
//   - 时间戳使用 system_clock 代表墙钟时间（可能受系统时间调整影响）。

#include <chrono>
#include <iostream>
#include <string>
#include <unordered_map>

struct SessionInfo {
    std::string user;
    std::chrono::system_clock::time_point lastAccess;
};

int main() {
    std::unordered_map<std::string, SessionInfo> sessions;
    sessions.reserve(1024); // 预估并发会话

    auto now = std::chrono::system_clock::now();
    sessions.emplace("sess-001", SessionInfo{"alice", now});
    sessions.emplace("sess-002", SessionInfo{"bob", now});

    auto touch = [&](const std::string& id) {
        if (auto it = sessions.find(id); it != sessions.end()) {
            it->second.lastAccess = std::chrono::system_clock::now();
            std::cout << "Session " << id << " touched.\n";
        } else {
            std::cout << "Session " << id << " not found.\n";
        }
    };

    touch("sess-001"); // 命中更新
    touch("sess-999"); // 未命中

    sessions.erase("sess-002"); // 删除一个会话

    std::cout << "Active session count: " << sessions.size() << '\n';
    return 0;
}